package custom

import (
	"image/color"

	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/canvas"
	"fyne.io/fyne/v2/widget"
)

// MyWidget 是一个简单的自定义小部件
type MyWidget struct {
	widget.BaseWidget // 继承 BaseWidget 来简化实现

	Text string
}

// NewMyWidget 创建一个新的 MyWidget 实例
func NewMyWidget(text string) *MyWidget {
	w := &MyWidget{
		Text: text,
	}
	w.ExtendBaseWidget(w)
	return w
}

// CreateRenderer 返回 MyWidget 的渲染器
func (w *MyWidget) CreateRenderer() fyne.WidgetRenderer {
	text := canvas.NewText(w.Text, color.Black)
	text.Alignment = fyne.TextAlignCenter

	return &myWidgetRenderer{
		widget: w,
		text:   text,
	}
}

// myWidgetRenderer 是 MyWidget 的渲染器
type myWidgetRenderer struct {
	widget *MyWidget
	text   *canvas.Text
}

// MinSize 返回 MyWidget 的最小尺寸
func (r *myWidgetRenderer) MinSize() fyne.Size {
	return r.text.MinSize()
}

// Layout 布局 MyWidget 的子元素
func (r *myWidgetRenderer) Layout(size fyne.Size) {
	r.text.Resize(size)
}

// Refresh 刷新 MyWidget 的显示
func (r *myWidgetRenderer) Refresh() {
	r.text.Text = r.widget.Text
	r.text.Refresh()
}

// Objects 返回 MyWidget 的所有 CanvasObject 子元素
func (r *myWidgetRenderer) Objects() []fyne.CanvasObject {
	return []fyne.CanvasObject{r.text}
}

// Destroy 销毁 MyWidget 渲染器
func (r *myWidgetRenderer) Destroy() {}
